
from itemadapter import ItemAdapter

from scrapy.pipelines.images import ImagesPipeline
from scrapy.pipelines.files import FilesPipeline
from scrapy import Request


class PicturePipeline(ImagesPipeline):
    """进行图片下载"""

    def get_media_requests(self, item, info):
        """向图片所在的网址发送请求"""

        # 获取图片的网址
        src = item['src']

        # 获取图片名字
        name = item['name']

        # 发送请求，请求对象传值的最佳方案: meta
        yield Request(src, meta={"img_src": src, 'img_name':name})

    def file_path(self, request, response=None, info=None, *, item=None):
        """保存至本地"""

        # 设置文件名
        name = request.meta['img_name']

        # 返回文件的保存路径，需要注名文件格式 jpg
        return f"/{name}.jpg"


    def item_completed(self, results, item, info):
        """最后的收尾工作"""

        # 将数据传递给 下一个管道
        return item